//
// Created by postgres on 5/2/17.
//
#include "../include/06tree/tree.h"
/* 用于构造二叉树********************************** */

typedef char String[24]; /*  0号单元存放串的长度 */
String str;

Status sAssign(String T,char *chars)
{
    int i;
    if(strlen(chars)>BiTreeMAXSIZE)
        return ERROR;
    else
    {
        T[0]=strlen(chars);
        for(i=1;i<=T[0];i++)
            T[i]=*(chars+i-1);
        return OK;
    }
}
/* ************************************************ */

Status InitBiTree(BiTree *t){
    *t=NULL;
    return OK;
}
void DestroyBiTree(BiTree *t){
    if(*t){
        if((*t)->lchild)
        DestroyBiTree(&(*t)->lchild);
        if((*t)->rchild)
        DestroyBiTree(&(*t)->rchild);
        pfree((*t));
        (*t)=NULL;
    }
}
char data;
int indx=1;
Status CreateBiTree(BiTree *t){
    data=str[indx++];

    if(data!='#'){
        (*t)=palloc(sizeof(BiTNode));
        (*t)->data=data;
        CreateBiTree(&(*t)->lchild);
        CreateBiTree(&(*t)->rchild);
    }else{
        (*t)=NULL;
    }

}
void preOrderTraverse(BiTree t){
    if(t){
        printf("%c",t->data);
        preOrderTraverse(t->lchild);
        preOrderTraverse(t->rchild);
    }else{
        printf("#");
    }
}
void InOrderTraverse(BiTree t){
    if(t){
        InOrderTraverse(t->lchild);
        printf("%c",t->data);
        InOrderTraverse(t->rchild);
    }else{
        printf("#");
    }
}
void PostOrderTraverse(BiTree t){
    if(t){
        PostOrderTraverse(t->lchild);
        PostOrderTraverse(t->rchild);
        printf("%c",t->data);
    }else{
        printf("#");
    }
}
int biTree_main()
{
    int i;
    BiTree bit;
    TElemType e1;
    InitBiTree(&bit);
    sAssign(str,"ABDH#K###E##CFI###G#J##");
    CreateBiTree(&bit);
    preOrderTraverse(bit);
    printf("\n");
    InOrderTraverse(bit);
    printf("\n");
    PostOrderTraverse(bit);
    return 0;
}